import os

from PyQt6.QtCore import QModelIndex, Qt, pyqtSignal
from PyQt6.QtGui import QPalette, QIcon, QAction
from PyQt6.QtWidgets import QWidget, QLabel, QHBoxLayout, QVBoxLayout, QStyleOptionViewItem, QTableWidgetItem, \
	QAbstractItemView
from qfluentwidgets import VBoxLayout, TableItemDelegate, isDarkTheme, TableWidget, SearchLineEdit
from qfluentwidgets import RoundMenu, setTheme, Theme, Action, MenuAnimationType, MenuItemDelegate, CheckableMenu, MenuIndicatorType
from qfluentwidgets import FluentIcon as FIF
from src.component.ChartMessageBox import ChartMessageBox


#搜索小框
class CustomTitleBar(QWidget):
	searchTextChanged = pyqtSignal(str)  # 信号用于发送搜索文本
	def __init__(self, parent):
		super().__init__(parent)
		self.setFixedHeight(48)
		# add title label
		self.titleLabel = QLabel(self)
		self.titleLabel.setObjectName('titleLabel')

		# add search line edit
		self.searchLineEdit = SearchLineEdit(self)
		self.searchLineEdit.setPlaceholderText('搜索对应数据关键词')
		self.searchLineEdit.setFixedWidth(400)
		self.searchLineEdit.setClearButtonEnabled(True)

		self.vBoxLayout = QVBoxLayout()
		self.buttonLayout = QHBoxLayout()
		self.buttonLayout.setSpacing(0)
		self.buttonLayout.setContentsMargins(0, 0, 0, 0)
		self.buttonLayout.setAlignment(Qt.AlignmentFlag.AlignTop)
		self.vBoxLayout.addLayout(self.buttonLayout)
		self.vBoxLayout.addStretch(1)
		#self.hBoxLayout.addLayout(self.vBoxLayout, 0)
		self.searchLineEdit.textChanged.connect(self.search_text_changed)  # 连接文本更改事件到槽函数

	def resizeEvent(self, e):
		self.searchLineEdit.move((self.width() - self.searchLineEdit.width()) //2, 8)

	def search_text_changed(self, text):
		self.searchTextChanged.emit(text)  # 发送搜索文本信号

#检索文件目录

class TableView(QWidget):
	def __init__(self,parent = None):
		super().__init__()
		self.parent = parent
		self.hBoxLayout = QHBoxLayout(self)
		self.tableView = TableWidget(self)

		self.tableView.setBorderVisible(True)
		self.tableView.setBorderRadius(8)

		self.tableView.setWordWrap(False)

		self.dataInfos = self.get_file_info()
		# 显示初始文件信息列表
		self.populate_table(self.dataInfos) #渲染信息到表格

		self.tableView.setRowCount(len(self.dataInfos))
		self.tableView.setColumnCount(5)
		#self.dataInfos += self.dataInfos #注释后防止渲染两次
		for i, dataInfo in enumerate(self.dataInfos):
			for j in range(5):
				self.tableView.setItem(i, j, QTableWidgetItem(dataInfo[j]))

		self.tableView.verticalHeader().hide()
		self.tableView.resizeColumnsToContents()
		self.tableView.setHorizontalHeaderLabels(['文件名', '创建者', '大小', '修改时间', '文件路径'])

		self.setStyleSheet("Demo{background: rgb(255, 255, 255)} ")
		self.hBoxLayout.setContentsMargins(50, 30, 50, 30)
		self.hBoxLayout.addWidget(self.tableView)
		self.resize(735, 760)
		self.tableView.setEditTriggers(QAbstractItemView.EditTrigger.EditKeyPressed)#让文字不可编辑
		self.tableView.itemClicked.connect(self.handle_item_clicked)#输出当前文件名字
		self.tableView.itemDoubleClicked.connect((self.handle_item_double_clicked))

	#输出当前文件名字
	def handle_item_clicked(self, item):
		if item.column() == 0:  # 点击第一列
			print(f"当前选中的文件名: {item.text()}")
	def handle_item_double_clicked(self, item):
		if item.column() == 0:  # 点击第一列
			print(f"打开当前选中的文件名: {item.text()}")
			chart_message_box = ChartMessageBox(item.text(),self.parent)#暂时传入文件名
			chart_message_box.exec()

	#这儿写每次根据关键词筛选出符合的文件数组,输入关键词str
	def get_file_info(self):
		directory_path = './data'
		files_info = []
		for filename in os.listdir(directory_path):
			file_path = os.path.join(directory_path, filename)
			if os.path.isfile(file_path):
				file_stat = os.stat(file_path)
				# 获取文件信息
				file_name = filename
				file_size = str(file_stat.st_size)  # 文件大小
				modified_time = str(file_stat.st_mtime)  # 修改时间
				#file_path = os.path.abspath(file_path)  # 文件路径名称
				file_path = "os.path.file_path"  # 文件路径名称
				# 将文件信息添加到数组中
				file_info = [file_name, 'admin', file_size, modified_time, file_path]
				files_info.append(file_info)
		return files_info


	def query_data_list(self, text: str):
		if not text:  # 如果没有输入关键词，显示所有数据
			self.populate_table(self.dataInfos)
		else:
			# 使用关键词筛选数据
			filtered_data = [data for data in self.dataInfos if any(text.lower() in item.lower() for item in data)]
			self.populate_table(filtered_data)

	def populate_table(self, data):
		self.tableView.clearContents()
		self.tableView.setRowCount(len(data))
		for i, dataInfo in enumerate(data):
			for j in range(5):
				self.tableView.setItem(i, j, QTableWidgetItem(dataInfo[j]))
		self.tableView.resizeRowsToContents()


#data主页面
class DataInterface(QWidget):
	def __init__(self, text: str, parent=None):
		super().__init__(parent=parent)
		self.setObjectName(text.replace(' ', '-'))

		self.main_layoyt = VBoxLayout(self)  # 主要布局
		self.titlebar = CustomTitleBar(self)
		self.tableView = TableView(self)
		self.tableView.setFixedHeight(500)
		self.main_layoyt.addWidget(self.titlebar)
		self.main_layoyt.addWidget(self.tableView)

		self.titlebar.searchTextChanged.connect(self.tableView.query_data_list)  # 连接搜索文本信号到查询函数

